import numpy as np
import pandas as pd
import librosa
import IPython.display as ipd
import soundfile as sf
import tensorflow as tf
import keras
from tensorflow.keras import initializers
from keras.models import Sequential
from keras.models import Model
from keras.layers import Dense
from keras.layers.core import Dense, Activation
from tensorflow.keras.layers import Conv1D
from tensorflow.keras.layers import MaxPooling1D
from tensorflow.keras.layers import Flatten
from tensorflow.keras.layers import Conv2D
from tensorflow.keras.layers import MaxPooling2D
from tensorflow.keras.layers import Input
# To execute a cell line by line
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
# Loading data
s, sr=librosa.load('train_clean_male.wav', sr=None)
sn, sr=librosa.load('train_dirty_male.wav', sr=None)
# Creating train and validation split for clean signal
s_train = s[0:1007119]
s_val = s[-251780:]
# Creating train and validation split for noisy signal
sn_train = sn[0:1007119]
sn_val = sn[-251780:]
# Coverting clean signals into spectograms
S_train = librosa.stft(s_train, n_fft=1024, hop_length=512)
S_val = librosa.stft(s_val, n_fft=1024, hop_length=512)
S_train_abs = np.transpose(np.abs(S_train))
S_train_abs.shape
S_val_abs = np.transpose(np.abs(S_val))
S_val_abs.shape
(1968, 513)
(492, 513)
# Coverting noisy signals into spectograms
X_train = librosa.stft(sn_train, n_fft=1024, hop_length=512)
X_val = librosa.stft(sn_val, n_fft=1024, hop_length=512)
X_train_abs = np.transpose(np.abs(X_train))
X_train_abs.shape
X_val_abs = np.transpose(np.abs(X_val))
X_val_abs.shape
(1968, 513)
(492, 513)
# Building a model and adding 3 hidden layers with 512 hidden units
model = Sequential()
model.add(Dense(512, input_dim = 513, activation='relu',kernel_initializer=tf.keras.initializers.HeNormal()))
model.add(Dense(512, activation='relu', kernel_initializer=tf.keras.initializers.HeNormal()))
model.add(Dense(512, activation='relu', kernel_initializer=tf.keras.initializers.HeNormal()))
model.add(Dense(513, activation='relu', kernel_initializer=tf.keras.initializers.HeNormal()))
# Calculating loss and optimizing it
model.compile(optimizer='adam',
loss='mse',
metrics=['accuracy'])
# Fitting the model on train dataset
model.fit(X_train_abs, S_train_abs, epochs=100, batch_size=128, shuffle=True)
Epoch 1/100 16/16 [==============================] - 1s 3ms/step - loss: 0.0850 - accuracy: 0.0523 Epoch 2/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0410 - accuracy: 0.1657 Epoch 3/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0253 - accuracy: 0.2642 Epoch 4/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0196 - accuracy: 0.3171 Epoch 5/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0164 - accuracy: 0.3664 Epoch 6/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0141 - accuracy: 0.3816 Epoch 7/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0127 - accuracy: 0.3913 Epoch 8/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0120 - accuracy: 0.3958 Epoch 9/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0109 - accuracy: 0.4085 Epoch 10/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0101 - accuracy: 0.4126 Epoch 11/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0095 - accuracy: 0.4284 Epoch 12/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0091 - accuracy: 0.4380 Epoch 13/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0086 - accuracy: 0.4380 Epoch 14/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0082 - accuracy: 0.4446 Epoch 15/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0083 - accuracy: 0.4466 Epoch 16/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0079 - accuracy: 0.4522 Epoch 17/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0080 - accuracy: 0.4502 Epoch 18/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0083 - accuracy: 0.4451 Epoch 19/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0081 - accuracy: 0.4477 Epoch 20/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0075 - accuracy: 0.4517 Epoch 21/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0071 - accuracy: 0.4527 Epoch 22/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0068 - accuracy: 0.4660 Epoch 23/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0066 - accuracy: 0.4736 Epoch 24/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0065 - accuracy: 0.4715 Epoch 25/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0062 - accuracy: 0.4675 Epoch 26/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0061 - accuracy: 0.4705 Epoch 27/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0058 - accuracy: 0.4756 Epoch 28/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0056 - accuracy: 0.4771 Epoch 29/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0054 - accuracy: 0.4807 Epoch 30/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0053 - accuracy: 0.4817 Epoch 31/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0052 - accuracy: 0.4868 Epoch 32/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0051 - accuracy: 0.4888 Epoch 33/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0050 - accuracy: 0.4792 Epoch 34/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0050 - accuracy: 0.4924 Epoch 35/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0049 - accuracy: 0.4827 Epoch 36/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0049 - accuracy: 0.4924 Epoch 37/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0047 - accuracy: 0.4858 Epoch 38/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0047 - accuracy: 0.4939 Epoch 39/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0047 - accuracy: 0.4980 Epoch 40/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0047 - accuracy: 0.4934 Epoch 41/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0047 - accuracy: 0.4909 Epoch 42/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0047 - accuracy: 0.4909 Epoch 43/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0048 - accuracy: 0.4939 Epoch 44/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0047 - accuracy: 0.4924 Epoch 45/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0046 - accuracy: 0.4985 Epoch 46/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0046 - accuracy: 0.4985 Epoch 47/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0046 - accuracy: 0.4990 Epoch 48/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0045 - accuracy: 0.4985 Epoch 49/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0043 - accuracy: 0.5020 Epoch 50/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0044 - accuracy: 0.5051 Epoch 51/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0044 - accuracy: 0.5041 Epoch 52/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0044 - accuracy: 0.5000 Epoch 53/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0048 - accuracy: 0.4970 Epoch 54/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0048 - accuracy: 0.5046 Epoch 55/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0049 - accuracy: 0.4903 Epoch 56/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0048 - accuracy: 0.4898 Epoch 57/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0045 - accuracy: 0.5041 Epoch 58/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0041 - accuracy: 0.5076 Epoch 59/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0041 - accuracy: 0.5071 Epoch 60/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0040 - accuracy: 0.5132 Epoch 61/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0040 - accuracy: 0.5066 Epoch 62/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0039 - accuracy: 0.5168 Epoch 63/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0038 - accuracy: 0.5193 Epoch 64/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0037 - accuracy: 0.5218 Epoch 65/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0036 - accuracy: 0.5224 Epoch 66/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0037 - accuracy: 0.5168 Epoch 67/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0036 - accuracy: 0.5305 Epoch 68/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0036 - accuracy: 0.5158 Epoch 69/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0036 - accuracy: 0.5315 Epoch 70/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0035 - accuracy: 0.5218 Epoch 71/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0035 - accuracy: 0.5285 Epoch 72/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0037 - accuracy: 0.5264 Epoch 73/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0040 - accuracy: 0.5249 Epoch 74/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0038 - accuracy: 0.5264 Epoch 75/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0039 - accuracy: 0.5264 Epoch 76/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0041 - accuracy: 0.5142 Epoch 77/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0044 - accuracy: 0.5076 Epoch 78/100 16/16 [==============================] - 0s 4ms/step - loss: 0.0041 - accuracy: 0.5158 Epoch 79/100 16/16 [==============================] - 0s 4ms/step - loss: 0.0039 - accuracy: 0.5183 Epoch 80/100 16/16 [==============================] - 0s 4ms/step - loss: 0.0036 - accuracy: 0.5198 Epoch 81/100 16/16 [==============================] - 0s 4ms/step - loss: 0.0034 - accuracy: 0.5203 Epoch 82/100 16/16 [==============================] - 0s 4ms/step - loss: 0.0035 - accuracy: 0.5310 Epoch 83/100 16/16 [==============================] - 0s 5ms/step - loss: 0.0034 - accuracy: 0.5346 Epoch 84/100 16/16 [==============================] - 0s 4ms/step - loss: 0.0032 - accuracy: 0.5381 Epoch 85/100 16/16 [==============================] - 0s 4ms/step - loss: 0.0031 - accuracy: 0.5488 Epoch 86/100 16/16 [==============================] - 0s 4ms/step - loss: 0.0031 - accuracy: 0.5396 Epoch 87/100 16/16 [==============================] - 0s 4ms/step - loss: 0.0030 - accuracy: 0.5473 Epoch 88/100 16/16 [==============================] - 0s 4ms/step - loss: 0.0029 - accuracy: 0.5498 Epoch 89/100 16/16 [==============================] - 0s 5ms/step - loss: 0.0029 - accuracy: 0.5574 Epoch 90/100 16/16 [==============================] - 0s 4ms/step - loss: 0.0029 - accuracy: 0.5539 Epoch 91/100 16/16 [==============================] - 0s 4ms/step - loss: 0.0031 - accuracy: 0.5513 Epoch 92/100 16/16 [==============================] - 0s 4ms/step - loss: 0.0031 - accuracy: 0.5549 Epoch 93/100 16/16 [==============================] - 0s 4ms/step - loss: 0.0031 - accuracy: 0.5473 Epoch 94/100 16/16 [==============================] - 0s 4ms/step - loss: 0.0031 - accuracy: 0.5539 Epoch 95/100 16/16 [==============================] - 0s 4ms/step - loss: 0.0030 - accuracy: 0.5534 Epoch 96/100 16/16 [==============================] - 0s 5ms/step - loss: 0.0030 - accuracy: 0.5539 Epoch 97/100 16/16 [==============================] - 0s 3ms/step - loss: 0.0029 - accuracy: 0.5518 Epoch 98/100 16/16 [==============================] - 0s 4ms/step - loss: 0.0030 - accuracy: 0.5518 Epoch 99/100 16/16 [==============================] - 0s 4ms/step - loss: 0.0029 - accuracy: 0.5579 Epoch 100/100 16/16 [==============================] - 0s 4ms/step - loss: 0.0029 - accuracy: 0.5549
<keras.callbacks.History at 0x7f9d10461590>
# Predicting on validation data
S_test = model.predict(X_val_abs)
16/16 [==============================] - 0s 2ms/step
# Recovering the signal from predicted output
S_hat = np.multiply(X_val/X_val_abs.T,S_test.T)
S_rec = librosa.istft(S_hat, hop_length=512)
ipd.Audio(S_rec, rate = sr)
# Clipping clean signal to calculate SNR
s_val = abs(s_val[0:251392])
s_val.shape
(251392,)
# Calculating SNR value
SNR = 10*np.log10((np.sum(np.square(abs(s_val))))/(np.sum(np.square(abs(s_val) - abs(S_rec)))))
print("The SNR value for recovered signal : ", round(SNR,2))
The SNR value for recovered signal : 10.45
# Loading first test data and applying STFT
t1, sr = librosa.load('test_x_01.wav', sr=None)
T1 = librosa.stft(t1, n_fft=1024, hop_length=512)
T1_abs = np.abs(T1)
T1_abs = T1_abs.T
T1_abs.shape
(142, 513)
# Predicting on test data
S_test1 = model.predict(T1_abs)
# Recovering the signal from predicted output
S_hat1 = np.multiply(T1/T1_abs.T,S_test1.T)
S_rec1 = librosa.istft(S_hat1, hop_length=512)
ipd.Audio(S_rec1, rate = sr)
sf.write('test_s_01_recons.wav', S_rec1, sr)
5/5 [==============================] - 0s 2ms/step
# Loading second test data and applying STFT
t2, sr = librosa.load('test_x_02.wav', sr=None)
T2 = librosa.stft(t2, n_fft=1024, hop_length=512)
T2_abs = np.abs(T2)
T2_abs = T2_abs.T
T2_abs.shape
(380, 513)
# Predicting on test data
S_test2 = model.predict(T2_abs)
# Recovering the signal from predicted output
S_hat2 = np.multiply(T2/T2_abs.T,S_test2.T)
S_rec2 = librosa.istft(S_hat2, hop_length=512)
ipd.Audio(S_rec2, rate = sr)
sf.write('test_s_02_recons.wav', S_rec2, sr)
12/12 [==============================] - 0s 1ms/step
# Loading data
s, sr=librosa.load('train_clean_male.wav', sr=None)
sn, sr=librosa.load('train_dirty_male.wav', sr=None)
# Creating train and validation split for clean signal
s_train = s[0:1007119]
s_val = s[-251780:]
# Creating train and validation split for noisy signal
sn_train = sn[0:1007119]
sn_val = sn[-251780:]
# Coverting clean signals into spectograms
S_train = librosa.stft(s_train, n_fft=1024, hop_length=512)
S_val = librosa.stft(s_val, n_fft=1024, hop_length=512)
S_train_abs = np.transpose(np.abs(S_train))
S_train_abs.shape
S_val_abs = np.transpose(np.abs(S_val))
S_val_abs.shape
(1968, 513)
(492, 513)
# Coverting noisy signals into spectograms
X_train = librosa.stft(sn_train, n_fft=1024, hop_length=512)
X_val = librosa.stft(sn_val, n_fft=1024, hop_length=512)
X_train_abs = np.transpose(np.abs(X_train))
X_train_abs.shape
X_val_abs = np.transpose(np.abs(X_val))
X_val_abs.shape
(1968, 513)
(492, 513)
# Building a model with 2 1D conloutional layers, 2 max pooling layers and 1 dense layer
model = Sequential()
model.add(Conv1D(filters=64, kernel_size=3, activation='relu',input_shape=(513,1)))
model.add(MaxPooling1D(pool_size=2))
model.add(Conv1D(filters=64, kernel_size=3, activation='relu'))
model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
model.add(Dense(512, activation='relu'))
model.add(Dense(513, activation='relu'))
# Calculating loss and optimizing it
model.compile(optimizer='adam',
loss='mse',
metrics=['accuracy'])
# Fitting the model
model.fit(X_train_abs, S_train_abs, epochs=100, batch_size=128, shuffle=True)
Epoch 1/100 16/16 [==============================] - 3s 41ms/step - loss: 0.0714 - accuracy: 0.0412 Epoch 2/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0430 - accuracy: 0.1550 Epoch 3/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0252 - accuracy: 0.2597 Epoch 4/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0169 - accuracy: 0.3283 Epoch 5/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0134 - accuracy: 0.3720 Epoch 6/100 16/16 [==============================] - 0s 7ms/step - loss: 0.0111 - accuracy: 0.3968 Epoch 7/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0097 - accuracy: 0.4060 Epoch 8/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0087 - accuracy: 0.4192 Epoch 9/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0084 - accuracy: 0.4309 Epoch 10/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0079 - accuracy: 0.4360 Epoch 11/100 16/16 [==============================] - 0s 7ms/step - loss: 0.0075 - accuracy: 0.4553 Epoch 12/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0069 - accuracy: 0.4522 Epoch 13/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0066 - accuracy: 0.4599 Epoch 14/100 16/16 [==============================] - 0s 7ms/step - loss: 0.0063 - accuracy: 0.4695 Epoch 15/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0059 - accuracy: 0.4812 Epoch 16/100 16/16 [==============================] - 0s 7ms/step - loss: 0.0056 - accuracy: 0.4812 Epoch 17/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0053 - accuracy: 0.4888 Epoch 18/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0051 - accuracy: 0.4909 Epoch 19/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0049 - accuracy: 0.5005 Epoch 20/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0048 - accuracy: 0.4970 Epoch 21/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0047 - accuracy: 0.5041 Epoch 22/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0045 - accuracy: 0.5107 Epoch 23/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0043 - accuracy: 0.5076 Epoch 24/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0042 - accuracy: 0.5122 Epoch 25/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0041 - accuracy: 0.5178 Epoch 26/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0041 - accuracy: 0.5163 Epoch 27/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0040 - accuracy: 0.5264 Epoch 28/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0038 - accuracy: 0.5239 Epoch 29/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0040 - accuracy: 0.5249 Epoch 30/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0038 - accuracy: 0.5305 Epoch 31/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0036 - accuracy: 0.5396 Epoch 32/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0035 - accuracy: 0.5346 Epoch 33/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0035 - accuracy: 0.5417 Epoch 34/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0033 - accuracy: 0.5432 Epoch 35/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0036 - accuracy: 0.5462 Epoch 36/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0035 - accuracy: 0.5366 Epoch 37/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0033 - accuracy: 0.5351 Epoch 38/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0033 - accuracy: 0.5407 Epoch 39/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0032 - accuracy: 0.5534 Epoch 40/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0032 - accuracy: 0.5513 Epoch 41/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0030 - accuracy: 0.5569 Epoch 42/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0029 - accuracy: 0.5523 Epoch 43/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0029 - accuracy: 0.5620 Epoch 44/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0029 - accuracy: 0.5691 Epoch 45/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0028 - accuracy: 0.5610 Epoch 46/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0027 - accuracy: 0.5706 Epoch 47/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0027 - accuracy: 0.5742 Epoch 48/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0026 - accuracy: 0.5732 Epoch 49/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0027 - accuracy: 0.5686 Epoch 50/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0026 - accuracy: 0.5666 Epoch 51/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0026 - accuracy: 0.5737 Epoch 52/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0029 - accuracy: 0.5727 Epoch 53/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0029 - accuracy: 0.5737 Epoch 54/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0027 - accuracy: 0.5661 Epoch 55/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0028 - accuracy: 0.5716 Epoch 56/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0027 - accuracy: 0.5828 Epoch 57/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0026 - accuracy: 0.5828 Epoch 58/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0025 - accuracy: 0.5854 Epoch 59/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0025 - accuracy: 0.5757 Epoch 60/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0024 - accuracy: 0.5833 Epoch 61/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0026 - accuracy: 0.5869 Epoch 62/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0026 - accuracy: 0.5879 Epoch 63/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0028 - accuracy: 0.5818 Epoch 64/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0025 - accuracy: 0.5828 Epoch 65/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0025 - accuracy: 0.5838 Epoch 66/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0024 - accuracy: 0.5950 Epoch 67/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0023 - accuracy: 0.5925 Epoch 68/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0025 - accuracy: 0.6006 Epoch 69/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0024 - accuracy: 0.5996 Epoch 70/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0025 - accuracy: 0.5879 Epoch 71/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0024 - accuracy: 0.5976 Epoch 72/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0023 - accuracy: 0.5971 Epoch 73/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0021 - accuracy: 0.6026 Epoch 74/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0020 - accuracy: 0.6042 Epoch 75/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0020 - accuracy: 0.6087 Epoch 76/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0020 - accuracy: 0.6087 Epoch 77/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0020 - accuracy: 0.6092 Epoch 78/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0022 - accuracy: 0.6062 Epoch 79/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0021 - accuracy: 0.6098 Epoch 80/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0020 - accuracy: 0.6026 Epoch 81/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0020 - accuracy: 0.6072 Epoch 82/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0022 - accuracy: 0.6016 Epoch 83/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0039 - accuracy: 0.5808 Epoch 84/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0039 - accuracy: 0.5655 Epoch 85/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0030 - accuracy: 0.5843 Epoch 86/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0027 - accuracy: 0.5884 Epoch 87/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0023 - accuracy: 0.5981 Epoch 88/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0020 - accuracy: 0.6037 Epoch 89/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0019 - accuracy: 0.6113 Epoch 90/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0018 - accuracy: 0.6143 Epoch 91/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0018 - accuracy: 0.6113 Epoch 92/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0019 - accuracy: 0.6225 Epoch 93/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0019 - accuracy: 0.6184 Epoch 94/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0018 - accuracy: 0.6199 Epoch 95/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0019 - accuracy: 0.6194 Epoch 96/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0020 - accuracy: 0.6138 Epoch 97/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0022 - accuracy: 0.6174 Epoch 98/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0020 - accuracy: 0.6113 Epoch 99/100 16/16 [==============================] - 0s 8ms/step - loss: 0.0017 - accuracy: 0.6098 Epoch 100/100 16/16 [==============================] - 0s 7ms/step - loss: 0.0015 - accuracy: 0.6270
<keras.callbacks.History at 0x7f9ca42e4e90>
# Predicting on validation data
S_test = model.predict(X_val_abs)
16/16 [==============================] - 0s 9ms/step
# Recovering the signal from predicted output
S_hat = np.multiply(X_val/X_val_abs.T,S_test.T)
S_rec = librosa.istft(S_hat, hop_length=512)
ipd.Audio(S_rec, rate = sr)
S_rec.shape
(251392,)
# Clipping clean signal to calculate SNR
s_val = abs(s_val[0:251392])
s_val.shape
(251392,)
# Calculating SNR value
SNR = 10*np.log10((np.sum(np.square(abs(s_val))))/(np.sum(np.square(abs(s_val) - abs(S_rec)))))
print("The SNR value for recovered signal : ", round(SNR,2))
The SNR value for recovered signal : 12.34
# Loading first test data and applying STFT
t1, sr = librosa.load('test_x_01.wav', sr=None)
T1 = librosa.stft(t1, n_fft=1024, hop_length=512)
T1_abs = np.abs(T1)
T1_abs = T1_abs.T
T1_abs.shape
(142, 513)
# Predicting on test data
S_test1 = model.predict(T1_abs)
5/5 [==============================] - 0s 31ms/step
# Recovering the signal from predicted output
S_hat1 = np.multiply(T1/T1_abs.T,S_test1.T)
S_rec1 = librosa.istft(S_hat1, hop_length=512)
ipd.Audio(S_rec1, rate = sr)
sf.write('test_s_01_recons_1Dcnn.wav', S_rec1, sr)
# Loading second test data and applying STFT
t2, sr = librosa.load('test_x_02.wav', sr=None)
T2 = librosa.stft(t2, n_fft=1024, hop_length=512)
T2_abs = np.abs(T2)
T2_abs = T2_abs.T
T2_abs.shape
(380, 513)
# Predicting on test data
S_test2 = model.predict(T2_abs)
12/12 [==============================] - 0s 15ms/step
# Recovering the signal from predicted output
S_hat2 = np.multiply(T2/T2_abs.T,S_test2.T)
S_rec2 = librosa.istft(S_hat2, hop_length=512)
ipd.Audio(S_rec2, rate = sr)
sf.write('test_s_02_recons_1Dcnn.wav', S_rec2, sr)
# Loading data
s, sr=librosa.load('train_clean_male.wav', sr=None)
sn, sr=librosa.load('train_dirty_male.wav', sr=None)
# Creating train and validation split for clean signal
s_train = s[0:1007119]
s_val = s[-251780:]
# Creating train and validation split for noisy signal
sn_train = sn[0:1007119]
sn_val = sn[-251780:]
# Coverting clean signals into spectograms
S_train = librosa.stft(s_train, n_fft=1024, hop_length=512)
S_val = librosa.stft(s_val, n_fft=1024, hop_length=512)
S_train_abs = np.transpose(np.abs(S_train))
S_train_abs.shape
S_val_abs = np.transpose(np.abs(S_val))
S_val_abs.shape
(1968, 513)
(492, 513)
# Coverting noisy signals into spectograms
X_train = librosa.stft(sn_train, n_fft=1024, hop_length=512)
X_val = librosa.stft(sn_val, n_fft=1024, hop_length=512)
X_train_abs = np.transpose(np.abs(X_train))
X_train_abs.shape
X_val_abs = np.transpose(np.abs(X_val))
X_val_abs.shape
(1968, 513)
(492, 513)
w = 20
train_data = X_train_abs[:w,:]
h = 1
while h <= X_train_abs.shape[0]-w:
train_data = np.append(train_data,X_train_abs[h:h+w,:],axis=0)
h += 1
x_train = train_data.reshape((1949,20,513,1))
x_train.shape
y_train = S_train_abs[:1949,:]
y_train = y_train.reshape((1949,513,1))
y_train.shape
(1949, 20, 513, 1)
(1949, 513, 1)
w = 20
val_data = X_val_abs[:w,:]
h = 1
while h <= X_val_abs.shape[0]-w:
val_data = np.append(val_data,X_val_abs[h:h+w,:],axis=0)
h += 1
x_val = val_data.reshape((473,20,513,1))
x_val.shape
(473, 20, 513, 1)
# Building a model with 2 22D conloutional layers and 2 max pooling layers
model = Sequential()
model.add(Input(shape = (20,513,1)))
model.add(Conv2D(100, kernel_size=(7,7), activation='relu', strides = 1))
model.add(MaxPooling2D(pool_size=(2, 2), strides=2, padding="valid"))
model.add(Conv2D(50, kernel_size=(5,5), activation='relu',strides = 1))
model.add(MaxPooling2D(pool_size=(2, 2), strides=2, padding="valid"))
model.add(Flatten())
model.add(Dense(513, activation='relu',kernel_initializer = tf.keras.initializers.HeNormal()))
# Calculating loss and optimizing it
model.compile(optimizer='adam',loss='mse')
# Fitting the model
model.fit(x=x_train, y=y_train, batch_size=100, epochs=130, shuffle=True)
Epoch 1/130 20/20 [==============================] - 2s 81ms/step - loss: 0.0823 Epoch 2/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0665 Epoch 3/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0572 Epoch 4/130 20/20 [==============================] - 1s 52ms/step - loss: 0.0477 Epoch 5/130 20/20 [==============================] - 1s 52ms/step - loss: 0.0423 Epoch 6/130 20/20 [==============================] - 1s 52ms/step - loss: 0.0355 Epoch 7/130 20/20 [==============================] - 1s 52ms/step - loss: 0.0298 Epoch 8/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0255 Epoch 9/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0233 Epoch 10/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0211 Epoch 11/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0194 Epoch 12/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0174 Epoch 13/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0162 Epoch 14/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0154 Epoch 15/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0145 Epoch 16/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0137 Epoch 17/130 20/20 [==============================] - 1s 54ms/step - loss: 0.0136 Epoch 18/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0131 Epoch 19/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0127 Epoch 20/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0120 Epoch 21/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0117 Epoch 22/130 20/20 [==============================] - 1s 54ms/step - loss: 0.0114 Epoch 23/130 20/20 [==============================] - 1s 54ms/step - loss: 0.0111 Epoch 24/130 20/20 [==============================] - 1s 54ms/step - loss: 0.0108 Epoch 25/130 20/20 [==============================] - 1s 54ms/step - loss: 0.0109 Epoch 26/130 20/20 [==============================] - 1s 54ms/step - loss: 0.0106 Epoch 27/130 20/20 [==============================] - 1s 54ms/step - loss: 0.0103 Epoch 28/130 20/20 [==============================] - 1s 55ms/step - loss: 0.0100 Epoch 29/130 20/20 [==============================] - 1s 54ms/step - loss: 0.0098 Epoch 30/130 20/20 [==============================] - 1s 54ms/step - loss: 0.0098 Epoch 31/130 20/20 [==============================] - 1s 54ms/step - loss: 0.0099 Epoch 32/130 20/20 [==============================] - 1s 54ms/step - loss: 0.0096 Epoch 33/130 20/20 [==============================] - 1s 54ms/step - loss: 0.0097 Epoch 34/130 20/20 [==============================] - 1s 54ms/step - loss: 0.0096 Epoch 35/130 20/20 [==============================] - 1s 54ms/step - loss: 0.0095 Epoch 36/130 20/20 [==============================] - 1s 54ms/step - loss: 0.0095 Epoch 37/130 20/20 [==============================] - 1s 54ms/step - loss: 0.0091 Epoch 38/130 20/20 [==============================] - 1s 54ms/step - loss: 0.0092 Epoch 39/130 20/20 [==============================] - 1s 54ms/step - loss: 0.0089 Epoch 40/130 20/20 [==============================] - 1s 54ms/step - loss: 0.0087 Epoch 41/130 20/20 [==============================] - 1s 54ms/step - loss: 0.0086 Epoch 42/130 20/20 [==============================] - 1s 54ms/step - loss: 0.0088 Epoch 43/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0093 Epoch 44/130 20/20 [==============================] - 1s 54ms/step - loss: 0.0091 Epoch 45/130 20/20 [==============================] - 1s 54ms/step - loss: 0.0087 Epoch 46/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0082 Epoch 47/130 20/20 [==============================] - 1s 54ms/step - loss: 0.0081 Epoch 48/130 20/20 [==============================] - 1s 54ms/step - loss: 0.0079 Epoch 49/130 20/20 [==============================] - 1s 54ms/step - loss: 0.0079 Epoch 50/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0077 Epoch 51/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0077 Epoch 52/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0078 Epoch 53/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0080 Epoch 54/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0081 Epoch 55/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0079 Epoch 56/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0076 Epoch 57/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0075 Epoch 58/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0074 Epoch 59/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0076 Epoch 60/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0076 Epoch 61/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0076 Epoch 62/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0075 Epoch 63/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0077 Epoch 64/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0079 Epoch 65/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0078 Epoch 66/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0078 Epoch 67/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0076 Epoch 68/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0076 Epoch 69/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0075 Epoch 70/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0073 Epoch 71/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0073 Epoch 72/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0071 Epoch 73/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0071 Epoch 74/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0071 Epoch 75/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0069 Epoch 76/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0069 Epoch 77/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0068 Epoch 78/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0069 Epoch 79/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0069 Epoch 80/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0070 Epoch 81/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0071 Epoch 82/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0071 Epoch 83/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0070 Epoch 84/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0072 Epoch 85/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0074 Epoch 86/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0072 Epoch 87/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0073 Epoch 88/130 20/20 [==============================] - 1s 54ms/step - loss: 0.0071 Epoch 89/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0071 Epoch 90/130 20/20 [==============================] - 1s 54ms/step - loss: 0.0072 Epoch 91/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0074 Epoch 92/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0073 Epoch 93/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0070 Epoch 94/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0069 Epoch 95/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0068 Epoch 96/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0067 Epoch 97/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0069 Epoch 98/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0071 Epoch 99/130 20/20 [==============================] - 1s 54ms/step - loss: 0.0071 Epoch 100/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0071 Epoch 101/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0075 Epoch 102/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0073 Epoch 103/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0069 Epoch 104/130 20/20 [==============================] - 1s 54ms/step - loss: 0.0067 Epoch 105/130 20/20 [==============================] - 1s 54ms/step - loss: 0.0065 Epoch 106/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0063 Epoch 107/130 20/20 [==============================] - 1s 54ms/step - loss: 0.0065 Epoch 108/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0064 Epoch 109/130 20/20 [==============================] - 1s 54ms/step - loss: 0.0065 Epoch 110/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0065 Epoch 111/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0064 Epoch 112/130 20/20 [==============================] - 1s 54ms/step - loss: 0.0063 Epoch 113/130 20/20 [==============================] - 1s 54ms/step - loss: 0.0065 Epoch 114/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0065 Epoch 115/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0064 Epoch 116/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0064 Epoch 117/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0066 Epoch 118/130 20/20 [==============================] - 1s 54ms/step - loss: 0.0071 Epoch 119/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0072 Epoch 120/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0068 Epoch 121/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0069 Epoch 122/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0068 Epoch 123/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0069 Epoch 124/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0068 Epoch 125/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0065 Epoch 126/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0064 Epoch 127/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0064 Epoch 128/130 20/20 [==============================] - 1s 53ms/step - loss: 0.0064 Epoch 129/130 20/20 [==============================] - 1s 54ms/step - loss: 0.0063 Epoch 130/130 20/20 [==============================] - 1s 54ms/step - loss: 0.0062
<keras.callbacks.History at 0x7f9c9e293510>
# Predicting on validation data
S_test = model.predict(x_val)
15/15 [==============================] - 0s 6ms/step
X_val1 = X_val[:,:473]
X_val_abs1 = X_val_abs[:473,:]
# Recovering the signal from predicted output
S_hat = np.multiply(X_val1/X_val_abs1.T,S_test.T)
S_rec = librosa.istft(S_hat, hop_length=512)
ipd.Audio(S_rec, rate = sr)
S_rec.shape
(241664,)
# Clipping clean signal to calculate SNR
s_val = abs(s_val[0:241664])
s_val.shape
(241664,)
# Calculating SNR value
SNR = 10*np.log10((np.sum(np.square(abs(s_val))))/(np.sum(np.square(abs(s_val) - abs(S_rec)))))
print("The SNR value for recovered signal : ", round(SNR,2))
The SNR value for recovered signal : 7.46
# Loading first test data and applying STFT
t1, sr = librosa.load('test_x_01.wav', sr=None)
T1 = librosa.stft(t1, n_fft=1024, hop_length=512)
T1_abs = np.abs(T1)
T1_abs = T1_abs.T
T1_abs.shape
(142, 513)
w = 20
train_data = T1_abs[:w,:]
h = 1
while h <= T1_abs.shape[0]-w:
train_data = np.append(train_data,T1_abs[h:h+w,:],axis=0)
h += 1
x_train = train_data.reshape((123,20,513,1))
x_train.shape
(123, 20, 513, 1)
# Predicting the model output
pred = model.predict(x_train,batch_size=32,verbose=0)
# Recovering the signal from predicted output
T1 = T1[:,:123]
T1_mag = (T1/np.abs(T1))
T1_rec = T1_mag*pred.T
T1_rec = librosa.istft(T1_rec,hop_length=512)
ipd.Audio(T1_rec, rate=sr)
sf.write('test_s_01_recons_2Dcnn.wav', T1_rec, sr)
# Loading second test data and applying STFT
t2, sr = librosa.load('test_x_02.wav', sr=None)
T2 = librosa.stft(t2, n_fft=1024, hop_length=512)
T2_abs = np.abs(T2)
T2_abs = T2_abs.T
T2_abs.shape
(380, 513)
w = 20
train_data = T2_abs[:w,:]
h = 1
while h <= T2_abs.shape[0]-w:
train_data = np.append(train_data,T2_abs[h:h+w,:],axis=0)
h += 1
x_train = train_data.reshape((361,20,513,1))
x_train.shape
(361, 20, 513, 1)
# Predicting the model output
pred = model.predict(x_train,batch_size=32,verbose=0)
# Recovering the signal from predicted output
T2 = T2[:,:361]
T2_mag = (T2/np.abs(T2))
T2_rec = T2_mag*pred.T
T2_rec = librosa.istft(T2_rec,hop_length=512)
ipd.Audio(T2_rec, rate=sr)
sf.write('test_s_02_recons_2Dcnn.wav', T2_rec, sr)